package org.com.system.util.model;

import java.util.HashMap;

import org.apache.commons.beanutils.BeanUtils;
import org.com.system.util.utils.ModelUtils;

import net.sf.json.JSONObject;

public class ActionValues<K,V> extends HashMap<K, V> {

	private static final long serialVersionUID = 1L;
	
	
	/**
	 * 取得字符串类型的值
	 * @param key
	 * @return
	 */
	public String getString(String key){
		String valueStr=null;
		Object valueObj=get(key);
		if(null!=valueObj){
			valueStr=String.valueOf(valueObj);
		}
		return valueStr;
	}
	
	/**
	 * 以Bean字段为模板，返回各字段对应的值。
	 * @param model
	 * @return
	 */
	public String[] getBeanValues(Class<?> model){
		int i=0;
		String[] fields_name=ModelUtils.getFieldNames(model, false);
		String[] fields_value=new String[fields_name.length];
		for(String field_name:fields_name){
			fields_value[i]=getString(field_name)==null?"null":"'"+getString(field_name)+"'";
			i++;
		}
		return fields_value;
	}
	
	/**
	 * 返回JSON对象
	 * @return
	 */
	public JSONObject getJSONObject(){
		JSONObject jsonObj=null;
		if(null!=this){
			jsonObj=JSONObject.fromObject(this);
		}
		return jsonObj;
	}
	
	/**
	 * 返回JSON字符串
	 * @return
	 */
	public String getJSONString(){
		String jsonStr=null;
		if(null!=this){
			jsonStr=JSONObject.fromObject(this).toString();
		}
		return jsonStr;
	}
	
	/**
	 * 把ActionValues里面与Bean里面对应的值进行更新。
	 * @param bean
	 * @param beanClass
	 */
	public void updateBean(Object bean,Class<?> beanClass){
		String[] fields=ModelUtils.getFieldNames(beanClass, false);
		for(String field:fields){
			if(!isEmpty(field)){
				try{
				    BeanUtils.setProperty(bean, field, get(field));
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		}
	}
	
	/**
	 * 判断键值是否为NULL，是返回true，否返回false
	 * @param key
	 * @return
	 */
	public boolean isNull(String key){
		if(null!=get(key)){
			return false;
		}
		return true;
	}
	
	/**
	 * 判断键值是否为NULL，是返回false，否返回true
	 * @param key
	 * @return
	 */
	public boolean isNotNull(String key){
		return !isNull(key);
	}
	
	/**
	 * 判断键值是否为空字符串，是返回true,否返回false;
	 * @param key
	 * @return
	 */
	public boolean isEmpty(String key){
		if(null!=get(key)&&!"".equals(get(key))){
			return false;
		}
		return true;
	}
	
	/**
	 * 判断键值是否为空字符串，是返回true,否返回false;
	 * @param key
	 * @return
	 */
	public boolean isNotEmpty(String key){
		return !isEmpty(key);
	}
	
	/**
	 * 判断ActionValues实例，是返回true,否返回false;
	 * @param key
	 * @return
	 */
	public boolean isNotEmpty(){
		if(null!=this&&this.size()>0){
			return true;
		}
		return false;
	}


}
